Add utility functions for portal paths
authorMatthias Clasen <mclasen@redhat.com>
Thu, 30 Aug 2018 17:05:55 +0000 (13:05 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 31 Aug 2018 02:53:36 +0000 (22:53 -0400)
The paths that we create for requests and sessions
need some icky code to create. Keep it in one place.

gtk/gtkprivate.c
gtk/gtkprivate.h

index 52240f61f9ac5402973aa5c3ca6c7a1a97649664..b8a34f32b55e256702382df1e7be2f76b86bf41b 100644 (file)
@@ -291,3 +291,39 @@ gtk_should_use_portal (void)
 
   return use_portal[0] == '1';
 }
+
+static char *
+get_portal_path (GDBusConnection  *connection,
+                 const char       *kind,
+                 char            **token)
+{
+  char *sender;
+  int i;
+  char *path;
+
+  *token = g_strdup_printf ("gtk%d", g_random_int_range (0, G_MAXINT));
+  sender = g_strdup (g_dbus_connection_get_unique_name (connection) + 1);
+  for (i = 0; sender[i]; i++)
+    if (sender[i] == '.')
+      sender[i] = '_';
+
+  path = g_strconcat (PORTAL_OBJECT_PATH, "/", kind, "/", sender, "/", token, NULL);
+
+  g_free (sender);
+
+  return path;
+}
+
+char *
+gtk_get_portal_request_path (GDBusConnection  *connection,
+                             char            **token)
+{
+   return get_portal_path (connection, "request", token);
+}
+
+char *
+gtk_get_portal_session_path (GDBusConnection  *connection,
+                             char            **token)
+{
+   return get_portal_path (connection, "session", token);
+}
index 2675889953ae4c1c3ada83ba1ec55ca2df07096b..809c8559590e52d25cef85d4eb7f00e762bae35a 100644 (file)
@@ -110,6 +110,10 @@ gdouble _gtk_get_slowdown (void);
 void    _gtk_set_slowdown (gdouble slowdown_factor);
 
 gboolean gtk_should_use_portal (void);
+char *gtk_get_portal_request_path (GDBusConnection  *connection,
+                                   char            **token);
+char *gtk_get_portal_session_path (GDBusConnection  *connection,
+                                   char            **token);
 
 #define PORTAL_BUS_NAME "org.freedesktop.portal.Desktop"
 #define PORTAL_OBJECT_PATH "/org/freedesktop/portal/desktop"